{{>licenseInfo}}

{{#operations}}/*
* {{classname}}Impl.h
*
* {{description}}
*/

#ifndef {{classnameSnakeUpperCase}}_IMPL_H_
#define {{classnameSnakeUpperCase}}_IMPL_H_

{{{defaultInclude}}}
#include <pistache/endpoint.h>
#include <pistache/http.h>
#include <pistache/router.h>
#include <memory>
#include <optional>

#include <{{classname}}.h>


{{#imports}}{{{import}}}
{{/imports}}

namespace {{apiNamespace}}
{

{{#hasModelImport}}
using namespace {{modelNamespace}};{{/hasModelImport}}

class {{declspec}} {{classname}}Impl : public {{apiNamespace}}::{{classname}} {
public:
    explicit {{classname}}Impl(const std::shared_ptr<Pistache::Rest::Router>& rtr);
    ~{{classname}}Impl() override = default;

    {{#operation}}
    {{#vendorExtensions.x-codegen-pistache-is-parsing-supported}}
    void {{operationIdSnakeCase}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}Pistache::Http::ResponseWriter &response);
    {{/vendorExtensions.x-codegen-pistache-is-parsing-supported}}
    {{^vendorExtensions.x-codegen-pistache-is-parsing-supported}}
    void {{operationIdSnakeCase}}(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter &response);
    {{/vendorExtensions.x-codegen-pistache-is-parsing-supported}}
    {{/operation}}

};

} // namespace {{apiNamespace}}

{{/operations}}


#endif
